Some implementations of Scheme permit definitions to occur at the beginning of a body (that is, the body of a lambda, let, let*, letrec, or define expression). Such definitions are known as internal definitions internal definition as opposed to the top level definitions described above. The variable defined by an internal definition is local to the body. That is, variable is bound rather than assigned, and the region of the binding is the entire body. For example,
A body containing internal definitions can always be converted into a completely equivalent letrec expression. For example, the let expression in the above example is equivalent to
Just as for the equivalent letrec expression, it must be possible to evaluate each expression of every internal definition in a body without assigning or referring to the value of any variable being defined.